//package com.tidy.seed.util;
//
//import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
//import com.baomidou.mybatisplus.core.toolkit.StringPool;
//import com.baomidou.mybatisplus.core.toolkit.StringUtils;
//import com.baomidou.mybatisplus.generator.AutoGenerator;
//import com.baomidou.mybatisplus.generator.InjectionConfig;
//import com.baomidou.mybatisplus.generator.config.*;
//import com.baomidou.mybatisplus.generator.config.po.TableInfo;
//import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
//import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
//
//import java.util.ArrayList;
//import java.util.List;
//import java.util.Scanner;
//
//public class CodeGenerator2 {
//
//    // 控制台输入
//    public static String scanner(String tip) {
//        Scanner scanner = new Scanner(System.in);
//        System.out.println("请输入 " + tip + "：");
//        if (scanner.hasNext()) {
//            String input = scanner.next();
//            if (StringUtils.isNotBlank(input)) {
//                return input;
//            }
//        }
//        throw new MybatisPlusException("请输入有效的 " + tip + "！");
//    }
//
//    public static void main(String[] args) {
//        // 1. 创建代码生成器
//        AutoGenerator mpg = new AutoGenerator();
//
//        // 2. 全局配置
//        GlobalConfig gc = new GlobalConfig();
//        String projectPath = System.getProperty("user.dir");
//        gc.setOutputDir(projectPath + "/src/main/java");
//        gc.setAuthor("ycyang");
//        gc.setOpen(false);
//        gc.setSwagger2(true);
//        gc.setFileOverride(true); // 覆盖旧文件
//        mpg.setGlobalConfig(gc);
//
//        // 3. 数据源配置
//        DataSourceConfig dsc = new DataSourceConfig();
//        dsc.setUrl("jdbc:mysql://localhost:3306/boot_api?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8");
//        dsc.setDriverName("com.mysql.cj.jdbc.Driver");
//        dsc.setUsername("root");
//        dsc.setPassword("root");
//        mpg.setDataSource(dsc);
//
//        // 4. 包配置
//        PackageConfig pc = new PackageConfig();
//        pc.setParent("com.tidy.seed"); // 父包
//        pc.setModuleName(scanner("模块名")); // 可输入模块名（如 user、order 等）
//        mpg.setPackageInfo(pc);
//
//        // 5. 自定义配置（用于输出 XML 到指定路径）
//        InjectionConfig cfg = new InjectionConfig() {
//            @Override
//            public void initMap() {
//                // 可选：注入自定义属性到模板
//            }
//        };
//
//        // 6. 自定义 Mapper XML 输出路径
//        String templatePath = "/templates/mapper.xml.ftl";
//        List<FileOutConfig> focList = new ArrayList<>();
//        focList.add(new FileOutConfig(templatePath) {
//            @Override
//            public String outputFile(TableInfo tableInfo) {
//                // 自定义输出路径：resources/mapper/模块名/xxxMapper.xml
//                return projectPath + "/src/main/resources/mapper/"
//                        + pc.getModuleName()
//                        + "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
//            }
//        });
//        cfg.setFileOutConfigList(focList);
//        mpg.setCfg(cfg);
//
//        // 7. 模板配置
//        TemplateConfig templateConfig = new TemplateConfig();
//        templateConfig.setXml(null); // 关闭默认 XML 输出，改用自定义方式
//        mpg.setTemplate(templateConfig);
//
//        // 8. 策略配置
//        StrategyConfig strategy = new StrategyConfig();
//        strategy.setNaming(NamingStrategy.underline_to_camel); // 表名转驼峰
//        strategy.setColumnNaming(NamingStrategy.underline_to_camel); // 字段转驼峰
//        strategy.setEntityLombokModel(true); // 使用 Lombok
//        strategy.setRestControllerStyle(true); // REST 风格 Controller
//        strategy.setInclude(scanner("表名，多个英文逗号分隔").split(",")); // 输入表名
//        strategy.setControllerMappingHyphenStyle(true); // 驼峰转连接符
//        strategy.setTablePrefix(pc.getModuleName() + "_"); // 去除表前缀（如 user_xxx -> Xxx）
//        mpg.setStrategy(strategy);
//
//        // 9. 执行生成
//        mpg.setTemplateEngine(new FreemarkerTemplateEngine()); // 使用 Freemarker 引擎
//        mpg.execute();
//    }
//}
